package flyweight;

import java.util.HashMap;

/**
 *
 * 享元模式: 减少创建类的数量
 * <br>将内部属性与外部属性分离，实现对象的复用
 * <br>如: Shape的color属于内部属性，每种color将会创建一个对象，但是其位置为外部属性，通过对已创建的对象赋值完成
 * <br>内部保存了一个缓冲池（HashMap）,这也是享元模式重要特征
 *
 * @author yi qiang
 * @date 2021/6/1 10:46
 */
public class ShapeFactory {

    private static final HashMap<String,Shape> circleMap=new HashMap<>();

    public static Shape getCircle(String color) {
        Circle circle = (Circle)circleMap.get(color);

        if(circle == null) {
            circle = new Circle(color);
            circleMap.put(color, circle);
            System.out.println("Creating circle of color : " + color);
        }
        return circle;
    }

}
